var express = require('express');               //引用express框架
var path = require('path');                     //引用目录
var fs = require('fs');                         //引用FS模块
var sqlite3 = require('sqlite3').verbose();     //数据库连接
var router = express.Router();                  //路由
var db=new sqlite3.Database('./terrain/dixing.pak');  //Database { open: true, filename: './terrain/dixing.pak', mode: 65542 }

function terrainname(x, y, z) {    //表名  参考官方文档PAK 地形影像紧凑存储  注意地形切片和影像切片数据库序列可以通用。不过，地形为TMS经纬度瓦片。请注意，还需要请求layer.json
  if (z < 10) {                    //如果Z小于10，则是blocks表名
    return 'blocks'                //人如果大于10.则否则 表名 = “blocks_” + tostring(z) + “_” + tostring(x / 512) + “_” + tostring(y / 512)
  } else {
    tx = parseInt(x / 512);
    ty = parseInt(y / 512);
    return 'blocks_' + z + '_' + tx + '_' + ty;       //select * from blocks_13_26_10  查表
  }
}

router.use('/cesiumlab/terrain', function (req, res, next) {   //如果以/cesiumlab开头的请求
  let key = req.originalUrl.split('/');                        //hostname:ip/之后的url + 请求参数对 
  if (key[6] !== undefined) {                                  //如果Y加后缀不为空.用于区分是请求json还是地形
    let ter = key[6].split('.');;                              //提取Y值  {y}.terrain
    let sqlstr = "select * from " + terrainname(key[5], ter[0], key[4]) + ' where x=' + key[5] + " and " + ' y=' + ter[0] + " and " + ' z=' + key[4]   //数据库命令    
    db.get(sqlstr, function (err, row) {                       //select * from blocks where x=404 and  y=217 and  z=9
      if (err === null) {                                      //如果返回不为空
        if (row !== undefined) {                               //如果返回不为undefined，则设置Access-Control-Allow-Headers: 和Content-Type: 
          res.set('Content-Type', 'application/vnd.quantized-mesh;extensions=octvertexnormals-watermask-bvh-metadata');
          res.status(200).send(row.tile)                       //返回tiles的内容
        } else {                                               //如果返回undefined
          res.status(404).send('文件没有找到!');                //返回404
        }
      } else {                                                 //如果报错，则404
        res.status(404).send('文件格式不对，或文件不存在');
      }
    })
  } else {
    let terstr = "select * from infos where contenttype='quantizedmesh'"    //查询layer.json
    db.get(terstr, function (err, row) {                      
      if (err === null) {                                    //如果返回不为空
        if (row !== undefined) {                             //如果返回不为undefined，则设置Access-Control-Allow-Headers: 和Content-Type: 
          res.set('Content-Type', 'application/json');
          res.status(200).send(row.layerjson)                //返回tiles的内容
        } else {                                             //如果返回undefined
          res.status(404).send('文件没有找到!');              //返回404
        }
      } else {                                               //如果报错，则404
        res.status(404).send('文件格式不对，或文件不存在');
      }
    })
  }
});

module.exports = router;
